QBuffer类为 QByteArray 提供一个 QIODevice 接口。
QBuffer使得妳可以通过 QIODevice 接口来访问一个 QByteArray 。那个 QByteArray 会被当成一个标准的随机访问文件。示例:
QBuffer buffer;
char ch;
buffer.open( QBuffer ::ReadWrite);
buffer.write("Qt rocks!");
buffer.seek(0);
buffer.getChar(&ch); // ch == 'Q'
buffer.getChar(&ch); // ch == 't'
buffer.getChar(&ch); // ch == ' '
buffer.getChar(&ch); // ch == 'r'
当妳创建一个QBuffer 时,默认情况下会自动创建一个内部的 QByteArray 缓存。妳可通过调用 buffer ()来直接访问这个缓存。妳还可以让QBuffer 使用一个已有的 QByteArray :通过调用 setBuffer ();或者将妳的字符数组传递给 QBuffer 的构造函数。
调用 open ()来打开缓存。然后调用 write ()或 putChar ()来向缓存中写数据,调用 read ()、 readLine ()、 readAll ()或 getChar ()来从缓存中读数据。 size ()会返回此缓存当前的大小,妳可以通过调用 seek ()来将游标移动到缓存中的任何位置。当妳对这个缓存操作完毕时,调用 close ()。
以下代码片段演示的是如何使用 QDataStream 和QBuffer 来向一个 QByteArray 中输出数据:
QByteArray byteArray;
QBuffer buffer(&byteArray);
buffer.open( QIODevice ::WriteOnly);
QDataStream out(&buffer);
out << QApplication ::palette();
在这里,我们将程序的 QPalette 转换成咯一个字符数组。以下是从 QByteArray 中读取数据的方法:
QPalette palette;
QBuffer buffer(&byteArray);
buffer.open( QIODevice ::ReadOnly);
QDataStream in(&buffer);
in >> palette;
另外, QTextStream 和 QDataStream 还提供咯便于使用的以 QByteArray 为参数的构造函数,它们会在背后创建一个QBuffer。
当有新数据到达缓存中时,QBuffer 会发射 readyRead ()信号。通过连接到这个信号,妳可以用QBuffer储存未经处理的临时数据。例如,妳可以在从一个FTP 服务器下载文件时将缓存传递给 QFtp 。一旦有新的文件数据被下载下来,就会发射 readyRead (),然后妳就可以处理刚刚来到的数据。每当有新数据被写入缓存中去时,QBuffer还会发射 bytesWritten ()信号。
参考 QFile 、 QDataStream 、 QTextStream 和 QByteArray 。
HxLauncher: Launch Android applications by voice commands